iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
DevOps

嘿,稍等一下!別急著開發功能,先來打造 Walking Skeleton 吧!系列 第 7

【Walking Skeleton】Day07 - 確認 SSH 首次連線的指紋 Fingerprint

  • 分享至 

  • xImage
  •  

近幾年資安越來越受到重視,這麼重要的事情當然要給它獨立寫一篇文章啦

指紋 Fingerprint

簡單來說就是在首次連線時伺服器會將伺服器的公鑰傳送到本機,這時會出現公鑰的雜湊值要你確認,這個雜湊值就是指紋,不過卻沒說要怎麼確認,所以大家常常就直接忽略了這個訊息,直接輸入 yes 就當沒事發生。
Enter Yes

但其實這樣是不行的,因為公鑰傳送的過程中有可能會受到中間人攻擊,也就是說這個公鑰有可能被調包,因此攻擊者就可以看到你跟伺服器在講些什麼悄悄話。
Don't Enter Yes

確認公鑰有沒有被調包有兩種方法:

  1. 使用管理工具查看
  2. 用別的方式連線進去看

以下示範在 AWS EC2 上怎麼找到伺服器公鑰的指紋


AWS CLI

這個不是那台遠端主機,而是用來管理那台遠端主機的工具,其實就是指令介面版的主控台啦,可以安裝在自己電腦上,也可以在網頁中使用。

因為在網頁上就有,所以我就直接用網頁上的示範,首先要找到開啟它的地方,它藏在一個很顯眼的地方:
AWS CloudShell Icon

開啟後長的像這樣
AWS CloudShell

先來輸入一個指令來看看有沒有 aws 這個指令,也就是 AWS CLI 這個工具

aws --version

AWS CLI Version

確認可以使用後,就從官方教學手冊中找出 取得執行個體指紋 的教學。

接著要輸入它給的指令,不過它的範例是要輸出到一個檔案,我不想要所以就把後面的 > temp.txt 去掉了

aws ec2 get-console-output --instance-id {你的執行個體ID} --output text

Get Instance Info

之後就會冒出一大段看不懂的東西
Instance Info

我們要找的東西不在這裡,在很後面的地方

看到這個冒號「:」表示還有下一頁,繼續按「空白鍵」就能顯示下一頁
Next Page

按到底後會出現「(END)」,按「q」就能退出這個顯示介面
End Page

現在畫面上應該會有類似的東東,中間這邊就是我們要找的東西
SSH Host Key Fingerprints

因為我產生金鑰對時是選 ED25519,所以指紋就是這一行
ED25519 Fingerprint

和首次連線時出現的指紋比對一下
First Connect Fingerprint

確實是同一個,看來沒受到中間人攻擊,這時候就能放心的輸入 yes 連線進去啦


遠端主機

如果已經有另一個已經成功連線的使用者,或是在網頁中可以開啟主機的終端機,那就可以直接在主機中找

伺服器公鑰通常會放在根目錄的 /etc/ssh/ 資料夾裡面,不是平常放使用者公鑰的那個位置

先來看一下這個目錄底下有哪些檔案,輸入 ls {路徑}

ls /etc/ssh/

Show Files

裡面看起來有不少檔案,可以發現有 .pub 的是公鑰,沒有的是私鑰,而且鑰匙的檔案都是以 ssh_host_{加密方式}_key 來做命名的

這個 ssh_host_ed25519_key.pub 應該就是我要找的公鑰檔案
ED25519 File

那就來輸入看看查看指紋的指令 ssh-keygen -lf {路徑}

ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

Show Fingerprint

和首次連線時出現的指紋比對一下
First Connect Fingerprint

Bingo! 一模一樣的指紋,看來沒受到中間人攻擊,這時候就能放心的輸入 yes 連線進去啦


上一篇
【Walking Skeleton】Day06 - SSH 原理
下一篇
【Walking Skeleton】Day08 - 在 EC2 上安裝伺服器軟體 Nginx
系列文
嘿,稍等一下!別急著開發功能,先來打造 Walking Skeleton 吧!34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言